#pragma once

enum GameMode {
	GM_TITLE,
	GM_LOAD,
	GM_FOLLOW_PLAYER,
	GM_SHOW_TEXT_LOG,
	GM_PICK_UP,
	GM_SHOW_ITEM_STACK,
	GM_SHOW_OBJECT,
	GM_EXAMINE_LEVEL,
	GM_DROP_ITEMS,
	GM_SHOW_EQUIPMENT,
	GM_SELECT_EQUIPMENT_ITEM,
	GM_LOCK_UNLOCK,
	GM_PICK_UP_MULTI,
	GM_LOOT_CHEST,
	GM_DEAD,
	GM_SELECT_QUAFF_ITEM,
	GM_KICK,
	GM_SELECT_RECIPE,
	GM_VIEW_RECIPE,
	GM_SELECT_RECIPE_ITEMS,
	GM_SELECT_FOOD,
	GM_SELECT_SCROLL,
	GM_SELECT_SCROLL_ITEM,
	GM_SELECT_TALENT,
	GM_SELECT_SKILL,
	GM_SELECT_NEW_SKILL,
	GM_RANGED_TARGET
};

enum DungeonType {
	DT_DUNGEON,
	NUM_DUNGEON_TYPES,
};

enum TileType {
	TT_NORMAL,
	NUM_TILE_TYPES
};

// GAME OBJECT TYPE HIERARCHY
enum TypeHierarchy {
	TH_GENERIC_TYPE,
	TH_PLAYER_TYPE,
	TH_NPC_TYPE,
	TH_AMMO_TYPE,
	TH_ARMOR_FAMILY,
	TH_ARMOR_TYPE,
	TH_FOOD_TYPE,
	TH_INGREDIENT_FAMILY,
	TH_INGREDIENT_TYPE,
	TH_MISC_TYPE,
	TH_POTION_TYPE,
	TH_SHIELD_TYPE,
	TH_TOOL_TYPE,
	TH_WEAPON_FAMILY,
	TH_MELEE_WEAPON_TYPE,
	TH_RANGED_WEAPON_TYPE,
	TH_ITEMCONTAINER_TYPE,
	TH_RESOURCE_FAMILY,
	TH_RESOURCE_TYPE,
	TH_TRAP_TYPE,
	TH_SCROLL_TYPE,
	NUM_HIERARCHY_TYPES
};

enum GenericType {
	GT_OB_DOOR,
	GT_OB_ITEMCONTAINER,
	GT_OB_PORTAL,
	GT_OB_RESOURCE,
	GT_OB_TRAP,
	GT_OB_WALL,
	GT_IT_AMMO,
	GT_IT_ARMOR,
	GT_IT_FOOD,
	GT_IT_INGREDIENT,
	GT_IT_MISC,
	GT_IT_POTION,
	GT_IT_SHIELD,
	GT_IT_TOOL,
	GT_IT_MELEE_WEAPON,
	GT_IT_RANGED_WEAPON,
	GT_IT_SCROLL,
	GT_CH_NPC,
	GT_CH_PLAYER,
	NUM_GENERIC_TYPES
};

enum PlayerType {
	PT_DEFAULT_PLAYER,
	NUM_PLAYER_TYPES
};

enum NpcType {
	NT_ABOMINABLE_HORROR,
	NT_ABOMINATION,
	NT_DEATH_FIEND,
	NT_HORRIFYING_MASS,
	NT_MUTANT,
	NT_SLIME,
	NT_SOUL_EATER,
	NT_TENTACLED_STARSPAWN,
	NT_THRASHING_HORROR,
	NUM_NPC_TYPES
};

enum ArmorFamily {
	AF_HEAD,
	AF_BODY,
	AF_HANDS,
	AF_LEGS,
	AF_FEET,
	NUM_ARMOR_FAMILIES
};

enum AmmoType {
	AT_9MM,
	NUM_AMMO_TYPES
};

enum ArmorType {
	AT_HEAD_ARMET, // HEAD
	AT_BODY_LEATHER_SCALE, // BODY
	AT_BODY_CHAIN,
	AT_HANDS_GAUNTLETS, // HANDS
	AT_LEGS_LEGGINGS, // LEGS
	AT_FEET_SABATONS, // FEET
	NUM_ARMOR_TYPES
};

enum FoodType {
	FT_BREAD_RATION,
	FT_MEAT_RATION,
	NUM_FOOD_TYPES,
	FT_CORPSE,
};

enum IngredientFamily {
	IF_HERB,
	IF_ALCH,
	IF_METAL,
	NUM_INGREDIENT_FAMILIES
};

enum IngredientType {
	IT_HERB_PAPRIKA,
	IT_HERB_PARSLEY,
	IT_HERB_MUSHROOM,
	IT_ALCH_NEWT_EYE,
	IT_ALCH_RAT_TAIL,
	IT_ALCH_GUNPOWDER,
	IT_METAL_SCRAP,
	NUM_INGREDIENT_TYPES
};

enum MiscType {
	MT_KEY_SQUARE,
	MT_KEY_ROUND,
	MT_KEY_SKELETON,
	MT_VICTORY_ITEM,
	NUM_MISC_TYPES
};

enum PotionType {
	PT_HEALING,
	PT_POISON,
	PT_INVIS,
	PT_GAIN_ATTR,
	PT_WATER,
	NUM_POTION_TYPES
};

enum ShieldType {
	ST_BUCKLER,
	ST_KITE,
	NUM_SHIELD_TYPES
};

enum ToolType {
	TT_PLANT,
	TT_METAL,
	NUM_TOOL_TYPES
};

enum WeaponFamily {
	WF_SWORD,
	WF_MACE,
	WF_SPEAR,
	WF_AXE,
	WF_HANDGUN,
	NUM_WEAPON_FAMILIES
};

enum MeleeWeaponType {
	MWT_SHORT_SWORD,
	MWT_LONG_SWORD,
	MWT_BASTARD_SWORD,
	MWT_TWO_HANDED_SWORD,
	MWT_CURVED_SWORD,
	MWT_MACE,
	MWT_FLAIL,
	MWT_MORNINGSTAR,
	MWT_SHORT_SPEAR,
	MWT_LONG_SPEAR,
	MWT_HALBERD,
	MWT_LANCE,
	MWT_AXE,
	MWT_WAR_AXE,
	MWT_GREAT_AXE,
	MWT_EXECUTIONERS_AXE,
	NUM_MELEE_WEAPON_TYPES
};

enum RangedWeaponType {
	RWT_PISTOL,
	NUM_RANGED_WEAPON_TYPES
};

enum ItemContainerType {
	ICT_BOX,
	ICT_CHEST,
	ICT_POTTERY,
	NUM_ITEMCONTAINER_TYPES
};

enum ResourceFamily {
	RF_PLANT,
	RF_METAL
};

enum ResourceType {
	RT_PT_PAPRIKA,
	RT_PT_PARSLEY,
	RT_PT_MUSHROOM,
	RT_MT_SCRAP,
	NUM_RESOURCE_TYPES
};

enum TrapType {
	TT_DAGGER,
	NUM_TRAP_TYPES
};

enum ScrollType {
	ST_IDENTIFY,
	ST_UNCURSE,
	NUM_SCROLL_TYPES
};

// CHARACTER INFORMATION
enum StatusEffect {
	SE_POISON,
	SE_INVIS,
	NUM_STATUS_EFFECTS
};

enum HealthStatus {
	HS_DEAD,
	HS_NEAR_DEATH,
	HS_HEAVILY_WOUNDED,
	HS_MODERATELY_WOUNDED,
	HS_SLIGHTLY_WOUNDED,
	HS_NOT_WOUNDED
};

enum GenderType {
	GT_NONE,
	GT_MALE,
	GT_FEMALE,
};

enum MeleeType {
	MT_FIST,
	MT_SHIELD,
	MT_ITEM,
	MT_WEAPON,
	MT_OTHER,
	MT_KICK
};

enum Stat {
	STR,
	COM,
	NIM,
	LOR,
	PER,
	NUM_STATS
};

enum EquipmentLocation {
	EL_LEFT_HAND,
	EL_RIGHT_HAND,
	EL_HEAD,
	EL_BODY,
	EL_HANDS,
	EL_LEGS,
	EL_FEET,
	NUM_EQUIPMENT_LOCATIONS
};

enum SatiationStatus {
	SS_STARVING,
	SS_VERY_HUNGRY,
	SS_HUNGRY,
	SS_NORMAL,
	SS_FULL,
	SS_VERY_FULL,
	SS_BLOATED
};

enum Talent {
	TAL_STR_1,
	TAL_STR_2,
	TAL_STR_3,
	TAL_COM_1,
	TAL_COM_2,
	TAL_COM_3,
	TAL_NIM_1,
	TAL_NIM_2,
	TAL_NIM_3,
	TAL_LOR_1,
	TAL_LOR_2,
	TAL_LOR_3,
	TAL_PER_1,
	TAL_PER_2,
	TAL_PER_3,
	TAL_SATIATION_1,
	TAL_SATIATION_2,
	NUM_TALENTS
};

enum Skill {
	SKI_EXPLOIT,
	SKI_FINESSE,
	SKI_STEALTH,
	NUM_SKILLS
};

// GENERAL ITEM INFORMATION
enum Status {
	BLESSED,
	UNCURSED,
	CURSED
};

enum MaterialType {
	MT_OAK,
	MT_WALNUT,
	MT_COPPER,
	MT_BRONZE,
	MT_BRASS,
	MT_IRON,
	NUM_MATERIAL_TYPES
};

// EQUIPMENT INFORMATION
enum MeleeWeaponPrefix {
	MWP_NONE,
	MWP_DULL,
	MWP_HEAVY,
	MWP_SHARP,
	MWP_BRUTAL,
	MWP_FINE,
	MWP_MASTERWORK,
	MWP_FLAMING,
	MWP_POISONOUS,
	NUM_MELEE_WEAPON_PREFIXES
};

enum MeleeWeaponSuffix {
	MWS_OF_NONE,
	MWS_OF_LUST,
	MWS_OF_GLUTTONY,
	MWS_OF_GREED,
	MWS_OF_SLOTH,
	MWS_OF_WRATH,
	MWS_OF_ENVY,
	MWS_OF_PRIDE,
	NUM_MELEE_WEAPON_SUFFIXES
};

enum RangedWeaponPrefix {
	RWP_NONE,
	NUM_RANGED_WEAPON_PREFIXES
};

enum RangedWeaponSuffix {
	RWS_OF_NONE,
	NUM_RANGED_WEAPON_SUFFIXES
};

enum ArmorPrefix {
	AP_NONE,
	NUM_ARMOR_PREFIXES
};

enum ArmorSuffix {
	AS_OF_NONE,
	NUM_ARMOR_SUFFIXES
};

enum ShieldPrefix {
	SP_NONE,
	NUM_SHIELD_PREFIXES
};

enum ShieldSuffix {
	SS_OF_NONE,
	NUM_SHIELD_SUFFIXES
};

enum GripType {
	GT_ONE,
	GT_ONE_FIVE,
	GT_TWO
};

enum ToolPrefix {
	TP_NOVICE,
	TP_NONE,
	TP_ADEPT,
	TP_EXPERT,
	NUM_TOOL_PREFIXES
};

enum ToolSuffix {
	TS_OF_NONE,
	NUM_TOOL_SUFFIXES
};

// LOCK INFORMATION
enum LockType {
	LT_NONE,
	LT_ROUND,
	LT_SQUARE,
	NUM_LOCK_TYPES
};

// RECIPE INFORMATION
enum RecipeType {
	RT_POTION_HEAL,
	NUM_RECIPE_TYPES
};

// ITEM STACK FILTER INFORMATION
enum FilterType {
	FT_MELEE_WEAPON,
	FT_RANGED_WEAPON,
	FT_TOOL,
	FT_SHIELD,
	FT_AMMO,
	FT_ARMOR,
	FT_POTION,
	FT_SCROLL,
	FT_INGREDIENT,
	FT_MISC,
	FT_FOOD,
	NUM_FILTER_TYPES
};

// STRING INFORMATION
enum LanguageType {
	LANG_ENG,
	NUM_LANGUAGE_TYPES
};

enum MiscStringType {
	MST_MELEE_WEAPON_PREFIX,
	MST_MELEE_WEAPON_SUFFIX,
	MST_RANGED_WEAPON_PREFIX,
	MST_RANGED_WEAPON_SUFFIX,
	MST_SHIELD_PREFIX,
	MST_SHIELD_SUFFIX,
	MST_ARMOR_PREFIX,
	MST_ARMOR_SUFFIX,
	MST_TOOL_PREFIX,
	MST_TOOL_SUFFIX,
	MST_SATIATION,
	MST_GENDER,
	MST_HEALTH,
	MST_STATUS_EFFECT,
	MST_STATUS,
	MST_GRIP,
	MST_STAT,
	MST_LOCK,
	MST_RECIPE,
	MST_EQUIPMENT,
	MST_FILTER,
	MST_MATERIAL,
	MST_DUNGEON,
	MST_TALENT,
	MST_SKILL,
	NUM_MISC_STRING_TYPES
};

enum StringType {
	ST_WELCOME,
	ST_WELCOME2,
	ST_NPC_LEVEL_UP,
	ST_NPC_EXPERIENCE_NEGATIVE,
	ST_NPC_EXPERIENCE_NORMAL,
	ST_NPC_EXPERIENCE_SLIGHT,
	ST_NPC_EXPERIENCE_MODERATE,
	ST_NPC_EXPERIENCE_HEAVY,
	ST_NPC_EXPERIENCE_EXTREME,
	ST_NPC_EXPERIENCE_LEVEL,
	ST_NPC_EQUIP,
	ST_NPC_UNEQUIP,
	ST_NPC_QUAFF,
	ST_NPC_HEAL,
	ST_NPC_POISON_DAMAGE,
	ST_NPC_GENDER,
	ST_NPC_GENDER_NONE,
	ST_NPC_HEALTH_STATUS,
	ST_NPC_MELEE_NOTHING,
	ST_NPC_MELEE_MISS,
	ST_NPC_MELEE_HIT,
	ST_NPC_MELEE_BLOCKED,
	ST_NPC_MELEE_CRIT,
	ST_NPC_MELEE_FLAME,
	ST_NPC_MELEE_ENVY,
	ST_NPC_MELEE_LUST,
	ST_NPC_MELEE_MISS_PLAYER,
	ST_NPC_MELEE_HIT_PLAYER,
	ST_NPC_MELEE_BLOCKED_PLAYER,
	ST_NPC_MELEE_FLAME_PLAYER,
	ST_NPC_MELEE_ENVY_PLAYER,
	ST_NPC_MELEE_LUST_PLAYER,
	ST_NPC_STATUS_EFFECT_GAIN,
	ST_NPC_STATUS_EFFECT_COMPOUND,
	ST_NPC_STATUS_EFFECT_LOSE,
	ST_NPC_TRAP_DAGGER_HIT,
	ST_NPC_TRAP_DAGGER_MISS,
	ST_NPC_OPEN_DOOR,
	ST_NPC_HAS_ITEM_EQUIPPED,
	ST_NPC_RELOAD,
	ST_PLAYER_SATIATION_CHANGE_STARVING,
	ST_PLAYER_SATIATION_CHANGE_VERY_HUNGRY,
	ST_PLAYER_SATIATION_CHANGE_HUNGRY,
	ST_PLAYER_EQUIP,
	ST_PLAYER_UNEQUIP,
	ST_PLAYER_EQUIP_FAIL,
	ST_PLAYER_UNEQUIP_FAIL,
	ST_PLAYER_DROP,
	ST_PLAYER_PICK_UP,
	ST_PLAYER_PICK_UP_FAIL,
	ST_PLAYER_GAIN_STR,
	ST_PLAYER_LOSE_STR,
	ST_PLAYER_GAIN_COM,
	ST_PLAYER_LOSE_COM,
	ST_PLAYER_GAIN_NIM,
	ST_PLAYER_LOSE_NIM,
	ST_PLAYER_GAIN_LOR,
	ST_PLAYER_LOSE_LOR,
	ST_PLAYER_GAIN_PER,
	ST_PLAYER_LOSE_PER,
	ST_PLAYER_QUAFF,
	ST_PLAYER_EAT,
	ST_PLAYER_EAT_CURSED,
	ST_PLAYER_EAT_BLESSED,
	ST_PLAYER_HEAL,
	ST_PLAYER_POISON_DAMAGE,
	ST_PLAYER_GENDER,
	ST_PLAYER_GENDER_NONE,
	ST_PLAYER_HEALTH_STATUS,
	ST_PLAYER_MELEE_NOTHING,
	ST_PLAYER_MELEE_MISS,
	ST_PLAYER_MELEE_HIT,
	ST_PLAYER_MELEE_BLOCKED,
	ST_PLAYER_MELEE_CRIT,
	ST_PLAYER_MELEE_FLAME,
	ST_PLAYER_MELEE_ENVY,
	ST_PLAYER_MELEE_LUST,
	ST_PLAYER_STATUS_EFFECT_GAIN,
	ST_PLAYER_STATUS_EFFECT_COMPOUND,
	ST_PLAYER_STATUS_EFFECT_LOSE,
	ST_PLAYER_KICK_NOTHING,
	ST_PLAYER_KICK_LOCK_SUCCEED,
	ST_PLAYER_KICK_LOCK_FAIL,
	ST_PLAYER_KICK_DESTROY_RESOURCE,
	ST_PLAYER_KICK_STUB,
	ST_PLAYER_KICK_ITEM_SLIDE_SUCCEED,
	ST_PLAYER_KICK_ITEM_SLIDE_FAIL,
	ST_PLAYER_TRAP_DAGGER_HIT,
	ST_PLAYER_TRAP_DAGGER_MISS,
	ST_PLAYER_ASCEND_SUCCESS,
	ST_PLAYER_ASCEND_FAIL,
	ST_PLAYER_LOCK_UNLOCK,
	ST_PLAYER_OPEN_CLOSE_DOOR,
	ST_PLAYER_READ_SCROLL,
	ST_PLAYER_IDENTIFY,
	ST_PLAYER_IDENTIFY_ALL,
	ST_PLAYER_UNCURSE,
	ST_PLAYER_UNCURSE_ALL,
	ST_PLAYER_LEVEL_UP,
	ST_PLAYER_TALENT,
	ST_PLAYER_ROTTING,
	ST_PLAYER_ROTTED,
	ST_PLAYER_SKILL_UP,
	ST_PLAYER_STARVED,
	ST_PLAYER_RELOAD,
	ST_PLAYER_RELOAD_NO_AMMO,
	ST_QUAFF_WATER_CURSED,
	ST_QUAFF_WATER_UNCURSED,
	ST_QUAFF_WATER_BLESSED,
	ST_TILE_SEE_SINGLE,
	ST_TILE_SEE_MULTIPLE,
	ST_OBSTACLE_STAND,
	ST_OBSTACLE_BLOCKED,
	ST_IC_SHATTER,
	ST_IC_HIDDEN_MONSTER,
	ST_IC_HIDDEN_ITEM,
	ST_IC_LOCK_TYPE,
	ST_IC_LOCKED,
	ST_DOOR_LOCK_TYPE,
	ST_DOOR_LOCKED,
	ST_DOOR_OPEN,
	ST_LOCK_DESTROYED,
	ST_RESOURCE_NUM_LEFT,
	ST_RESOURCE_HARDNESS,
	ST_RESOURCE_HEALTH,
	ST_RESOURCE_DAMAGE_PLANT,
	ST_RESOURCE_DAMAGE,
	ST_RESOURCE_GATHER,
	ST_RESOURCE_GATHER_RARE,
	ST_RESOURCE_GATHER_NONE,
	ST_RESOURCE_GATHER_ATTEMPT,
	ST_TRAP_EMPTY,
	ST_ITEM_WEIGHT,
	ST_POTION_POWER,
	ST_POTION_SHATTER,
	ST_TOOL_STATS,
	ST_TOOL_HIGH_QUALITY,
	ST_WEAPON_NUM_DICE,
	ST_WEAPON_DIE_SIDES,
	ST_WEAPON_ATTACK_BONUS,
	ST_WEAPON_ACCURACY_BONUS,
	ST_WEAPON_SPEED,
	ST_WEAPON_MATERIAL,
	ST_WEAPON_HIGH_QUALITY,
	ST_WEAPON_AMMO,
	ST_WEAPON_AMMO_TYPE,
	ST_WEAPON_RANGE,
	ST_ARMOR_DODGE,
	ST_ARMOR_ARMOR,
	ST_ARMOR_MATERIAL,
	ST_ARMOR_HIGH_QUALITY,
	ST_SHIELD_BLOCK,
	ST_SHIELD_MATERIAL,
	ST_SHIELD_HIGH_QUALITY,
	ST_CRAFT_ITEM,
	ST_CRAFT_ITEM_DETAILS,
	ST_CRAFT_INSTRUCTIONS,
	ST_INPUT_INVENTORY,
	ST_INPUT_DROP,
	ST_INPUT_LOCK_UNLOCK,
	ST_INPUT_LOOT_CHEST,
	ST_INPUT_QUAFF,
	ST_INPUT_EAT,
	ST_INPUT_KICK,
	ST_INPUT_VIEW_ITEM_STACK,
	ST_INPUT_EQUIP,
	ST_INPUT_INGREDIENT,
	ST_INPUT_CANCEL,
	ST_INPUT_PICK_UP_ASK,
	ST_INPUT_PICK_UP_MULTIPLE,
	ST_INPUT_NO_KEY,
	ST_INPUT_NO_LOCK,
	ST_INPUT_SCROLL,
	ST_INPUT_SCROLL_ITEM,
	ST_INPUT_TALENT,
	ST_INPUT_SKILL,
	ST_INPUT_NEW_SKILL,
	ST_INPUT_NO_AMMO,
	ST_INPUT_NO_RANGED,
	ST_NOTHING,
	NUM_STRING_TYPES
};